package showgo.modell.stueck;

import java.util.ArrayList;
import java.util.List;

/**
 * Eine Szene eines Aktes besteht aus einer Szenen- ID, z.B. "Erste Szene", und
 * einer Anzahl von Absaetzen. Zudem hat jede Szene auch eine feste Anzahl von
 * Rollen.
 * 
 * @author lutz
 * 
 */
public class Szene {

    private String szenenID;

    private List<Rolle> rollenInSzene;

    private List<Absatz> absaetze;

    public List<Rolle> getRollenInSzene() {
	return rollenInSzene;
    }

    public void setRollenInSzene(List<Rolle> rollenInSzene) {
	this.rollenInSzene = rollenInSzene;
    }

    public Szene(String szenenID, List<Rolle> rollenInSzene,
	    List<Absatz> absaetze) {
	super();
	this.szenenID = szenenID;
	this.rollenInSzene = rollenInSzene;
	this.absaetze = absaetze;
    }

    public String getSzenenID() {
	return szenenID;
    }

    public void setSzenenID(String szenenID) {
	this.szenenID = szenenID;
    }

    public List<Absatz> getAbsaetze() {
	return absaetze;
    }

    public void setAbsaetze(List<Absatz> absaetze) {
	this.absaetze = absaetze;
    }

    public Szene tiefeKopie() {
	String szenenID = this.szenenID;

	List<Absatz> neuAbsaetze = new ArrayList<Absatz>();
	for (int i = 0; i < this.absaetze.size(); i++) {
	    if (this.absaetze.get(i).getAbsatzID().equals("Regieanweisung")) {
		Regieanweisung neuRegie = (Regieanweisung) this.absaetze.get(i);
		Regieanweisung neueRegieanweisung = neuRegie.tiefeKopie();
		neuAbsaetze.add(neueRegieanweisung);
	    } else {
		Rede neuRede = (Rede) this.absaetze.get(i);
		Rede neueRedepassage = neuRede.tiefeKopie();
		neuAbsaetze.add(neueRedepassage);
	    }
	}

	List<Rolle> neuRollenInSzene = new ArrayList<Rolle>();
	for (int i = 0; i < this.rollenInSzene.size(); i++) {
	    Rolle neueRolle = this.rollenInSzene.get(i).tiefeKopie();
	    neuRollenInSzene.add(neueRolle);
	}

	Szene neueSzene = new Szene(szenenID, neuRollenInSzene, neuAbsaetze);
	return neueSzene;
    }

    @Override
    public String toString() {
	String szene = this.szenenID;
	for (int k = 0; k < absaetze.size(); k++) {
	    szene += "\n";
	    if (this.absaetze.get(k).getAbsatzID().equals("Regieanweisung")) {
		szene += "Regieanweisung: ";
		Regieanweisung regieanweisung = (Regieanweisung) this.absaetze
			.get(k);
		szene += regieanweisung.getAnweisung();
	    } else {
		szene += "Rolle: ";
		Rede redepassage = (Rede) this.absaetze.get(k);
		szene += redepassage.getRollenName() + ": "
			+ redepassage.getText().toString();
	    }
	}
	return szene;
    }

}
